﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Sigecov.Models;
namespace Sigecov.Formularios
{
    public partial class FrmProduto : Sigecov.Formularios.FrmBase
    {
        public FrmProduto()
        {
            InitializeComponent();
        }
        private void btnSalvar_Click(object sender, EventArgs e)
        {
            if (_tipoOperacao == "INCLUIR")
            {
                using (SigecovContext DB = new SigecovContext())
                {
                    try
                    {
                        Produto produto = new Produto();
                        Estoque estoque = new Estoque();
                        int _idProduto = 0;
                        if (!
                            (
                                (string.IsNullOrWhiteSpace(txtNome.Text))
                                || (string.IsNullOrWhiteSpace(txtPeso.Text))
                                || (string.IsNullOrWhiteSpace(txtPrecoUnitario.Text))
                                || (string.IsNullOrWhiteSpace(txtQuantidade.Text))
                            )
                           )
                        {
                            var produtos= DB.Produtos.Where(p => p.proNome == txtNome.Text);
                            if (produtos.Count() == 0)
                            {
                                produto.proNome = txtNome.Text;
                                produto.proPeso = Convert.ToDouble(txtPeso.Text);
                                produto.proPrecoUnitario = Convert.ToDouble(txtPrecoUnitario.Text);
                                if (rdbSim.Checked)
                                    produto.proDescontinuado = "S";
                                else
                                    produto.proDescontinuado = "N";
                                produto.proDataCadastro = DateTime.Now;
                                produto.forId = Convert.ToInt32(cbxFornecedor.SelectedValue);
                                produto.catId = Convert.ToInt32(cbxCategoria.SelectedValue);

                                produto.Cadastrar(produto, DB);
                                var sql = DB.Produtos.OrderByDescending(p => p.proId).First();
                                _idProduto = sql.proId;

                                estoque.etqQuantidade = Convert.ToInt32(txtQuantidade.Text);
                                estoque.proId = _idProduto;
                                estoque.Cadastrar(estoque, DB);

                                MessageBox.Show("Produto cadastrado com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                Ferramenta.ResetarControles(this.Controls);
                                txtNome.Focus();
                            }
                            else
                            {
                                MessageBox.Show("Esse produto já está cadastrado!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                txtNome.Clear();
                                txtNome.Focus();
                            }
                        }
                        else
                        {
                            MessageBox.Show("Por favor informe todos os campos obrigatórios!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            txtNome.Focus();
                        }
                    }
                    catch
                    {
                        MessageBox.Show("Falha ao inserir o produto!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtNome.Focus();
                    }
                }
            }
            else if (_tipoOperacao == "ALTERAR")
            {
                using (SigecovContext DB = new SigecovContext())
                {
                    try
                    {
                        Produto produto = new Produto();
                        Estoque estoque = new Estoque();
                        produto = DB.Produtos.Find(_idAcao);
                        estoque = DB.Estoques.Find(_idAcao);
                        if (!
                            (
                                (string.IsNullOrWhiteSpace(txtNome.Text))
                                || (string.IsNullOrWhiteSpace(txtPeso.Text))
                                || (string.IsNullOrWhiteSpace(txtPrecoUnitario.Text))
                                || (string.IsNullOrWhiteSpace(txtQuantidade.Text))
                            )
                           )
                        {
                            produto.proNome = txtNome.Text;
                            produto.proPeso = Convert.ToDouble(txtPeso.Text);
                            produto.proPrecoUnitario = Convert.ToDouble(txtPrecoUnitario.Text);
                            if (rdbSim.Checked)
                                produto.proDescontinuado = "S";
                            else
                                produto.proDescontinuado = "N";
                            produto.proDataCadastro = DateTime.Now;
                            produto.forId = Convert.ToInt32(cbxFornecedor.SelectedValue);
                            produto.catId = Convert.ToInt32(cbxCategoria.SelectedValue);

                            produto.Alterar(produto, DB);

                            estoque.etqQuantidade = Convert.ToInt32(txtQuantidade.Text);

                            estoque.Alterar(estoque, DB);

                            MessageBox.Show("Produto alterado com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            Close();
                        }
                        else
                        {
                            MessageBox.Show("Por favor informe todos os campos obrigatórios!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            txtNome.Focus();
                        }
                        
                    }
                    catch
                    {
                        MessageBox.Show("Falha ao alterar o produto!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        btnCancelar.Focus();
                    }
                }

            }
        }

        private void btnDeletar_Click(object sender, EventArgs e)
        {
            if (_tipoOperacao == "DELETAR")
            {
                using (SigecovContext DB = new SigecovContext())
                {
                    try
                    {
                        DialogResult confirmar = MessageBox.Show("Deseja deletar o produto "+txtNome.Text.ToUpper()+"?", "Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                        if (confirmar.ToString().ToUpper() == "YES")
                        {
                            Produto produto = new Produto();
                            Estoque estoque = new Estoque();
                            produto = DB.Produtos.Find(_idAcao);
                            estoque = DB.Estoques.Find(_idAcao);

                            estoque.Deletar(estoque, DB);

                            produto.Deletar(produto, DB);

                            MessageBox.Show("Produto deletado com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            Close();
                        }
                    }
                    catch
                    {
                        MessageBox.Show("Falha ao deletar o produto!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        btnDeletar.Focus();
                    }
                }
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Ferramenta.ResetarControles(this.Controls);
        }

        private void btnSair_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void FrmProduto_Load(object sender, EventArgs e)
        {
            this.AcaoIncluir();
            cbxFornecedor.DataSource = Fornecedore.ListarFornecedor();
            cbxFornecedor.DisplayMember = "forEmpresa";
            cbxFornecedor.ValueMember = "forId";

            cbxCategoria.DataSource = Categoria.ListarCategoria();
            cbxCategoria.DisplayMember = "catNome";
            cbxCategoria.ValueMember = "catId";

            if (_tipoOperacao == "INCLUIR")
            {
                this.lblTituloAcao.Text = "Cadastrar Produto";
                Ferramenta.ResetarControles(this.Controls);
                this.AcaoIncluir();
            }
            else if (_tipoOperacao == "ALTERAR")
            {
                this.lblTituloAcao.Text = "Alterar Produto";
                this.AcaoAlterar();
                using (SigecovContext DB = new SigecovContext())
                {
                    Produto produto = DB.Produtos.Find(_idAcao);
                    Estoque estoque = DB.Estoques.Find(_idAcao);
                    txtNome.Text = produto.proNome;
                    txtPeso.Text = produto.proPeso.ToString();
                    txtPrecoUnitario.Text = produto.proPrecoUnitario.ToString();
                    txtQuantidade.Text = estoque.etqQuantidade.ToString();
                    if (produto.proDescontinuado == "S")
                        rdbSim.Checked = true;
                    else
                        rdbNao.Checked = true;

                    cbxCategoria.SelectedValue = produto.Categoria.catId;
                    cbxFornecedor.SelectedValue = produto.Fornecedore.forId;
                    //_idProduto = produto.proId;
                }
            }
            else if (_tipoOperacao == "DELETAR")
            {
                this.lblTituloAcao.Text = "Deletar Produto";
                this.AcaoDeletar();
                using (SigecovContext DB = new SigecovContext())
                {
                    Produto produto = DB.Produtos.Find(_idAcao);
                    Estoque estoque = DB.Estoques.Find(_idAcao);
                    txtNome.Text = produto.proNome;
                    txtPeso.Text = produto.proPeso.ToString();
                    txtPrecoUnitario.Text = produto.proPrecoUnitario.ToString();
                    txtQuantidade.Text = estoque.etqQuantidade.ToString();
                    if (produto.proDescontinuado == "S")
                        rdbSim.Checked = true;
                    else
                        rdbNao.Checked = true;
                    cbxCategoria.SelectedItem = produto.Categoria.catNome;
                    cbxFornecedor.SelectedItem = produto.Fornecedore.forEmpresa;
                    Ferramenta.DesativarControles(this.Controls);
                }
            }
        }

        private void txtQuantidade_KeyPress(object sender, KeyPressEventArgs e)
        {
            Ferramenta.SomenteNumero(e);
        }

        private void txtPrecoUnitario_KeyPress(object sender, KeyPressEventArgs e)
        {
            Ferramenta.ValorMonetario(e);
        }

        private void txtPeso_KeyPress(object sender, KeyPressEventArgs e)
        {
            Ferramenta.ValorMonetario(e);
        }
    }
}
